package com.lecture.java8.date;

import java.time.LocalDateTime;
import java.util.*;

//如果我有一个list集合，称为集合1，集合1中每个对象都包含一个开始时间一个结束时间，
// 还有另外一个集合，称为集合2，集合2中有个时间，
// 如何根据集合1中的时间区间将集合2分组
public class Demo1 {
    public static void main(String[] args) {
        // 假设list1和list2是两个集合，list1中的元素包含开始时间和结束时间，list2中的元素包含时间
        List<TimeRange> list1 = new ArrayList<>();
        List<LocalDateTime> list2 = new ArrayList<>();

        // 初始化list1和list2
        list1.add(new TimeRange(LocalDateTime.of(2022, 7, 4, 10, 0), LocalDateTime.of(2022, 7, 4, 11, 0)));
        list1.add(new TimeRange(LocalDateTime.of(2022, 7, 4, 11, 0), LocalDateTime.of(2022, 7, 4, 12, 0)));
        list1.add(new TimeRange(LocalDateTime.of(2022, 7, 4, 13, 0), LocalDateTime.of(2022, 7, 4, 14, 0)));
        list2.add(LocalDateTime.of(2022, 7, 4, 10, 30));
        list2.add(LocalDateTime.of(2022, 7, 4, 11, 30));
        list2.add(LocalDateTime.of(2022, 7, 4, 13, 30));

        // 对list1按照开始时间排序
        list1.sort(Comparator.comparing(a -> a.start));

        // 根据list1中的时间区间将list2分组
        Map<TimeRange, List<LocalDateTime>> map = new HashMap<>();
        int i = 0, j = 0;
        while (i < list1.size() && j < list2.size()) {
            TimeRange range = list1.get(i);
            LocalDateTime time = list2.get(j);
            if (time.isAfter(range.end)) {
                i++;
            } else if (time.isBefore(range.start)) {
                j++;
            } else {
                map.computeIfAbsent(range, k -> new ArrayList<>()).add(time);
                j++;
            }
        }

        // 输出分组结果
        System.out.println(map);
    }
}



// 定义一个时间区间类
class TimeRange {
    LocalDateTime start;
    LocalDateTime end;

    public TimeRange(LocalDateTime start, LocalDateTime end) {
        this.start = start;
        this.end = end;
    }
}
